package com.yangquan.visibility;

// 通过同步块强制刷新线程缓存与主内存的数据
// 同步块退出时强制将修改刷回主内存，进入时清空本地缓存
public class SynchronizedFix {
    private static boolean flag = false;

    public static void main(String[] args) {
        new Thread(() -> {
            while (true) {
                synchronized (SynchronizedFix.class) { // 加锁读取
                    if (flag) break;
                }
            }
            System.out.println("线程 1 退出循环");
        }).start();

        new Thread(() -> {
            try { Thread.sleep(1000); } 
            catch (InterruptedException e) {}
            synchronized (SynchronizedFix.class) { // 加锁修改
                flag = true;
            }
            System.out.println("线程 2 修改 flag 为 true");
        }).start();
    }
}